home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / patches / rsrcadd / rsrcad_3.s < prev   
Text File  |  1990-08-09  |  6KB  |  148 lines

  1. * RS232-Receive Buffer Enhancer           (wr) 09.08.1990 by Jrgen Meyer
  2. *
  3. * Vergr”áert den Empfangsbuffer der RS232-Schnittstelle auf einen vom
  4. * User zu setzenden Wert. Damit wird z.B. der šberlauf des Empfangsbuffers
  5. * verhindert, wenn der Sender schneller als der Empf„nger ist und kein
  6. * Datenflussprotokoll (CTS/RTS) verwendet wird.
  7. *
  8. * RSRCAD_x.PRG
  9. *        |
  10. *        +------ Gr”áe, um die der Buffer erweitert werden soll. Dabei sind
  11. *                die Werte von 0 bis 5 m”glich :
  12. *
  13. *                0 =  1 KByte
  14. *                1 =  2 KByte
  15. *                2 =  4 KByte
  16. *                3 =  8 KByte
  17. *                4 = 16 KByte
  18. *                5 = 32 KByte
  19. *
  20. * Das Programm kann sowohl im Auto-Ordner als auch direkt gestartet werden.
  21. * Mehrfachige Installation ist nicht m”glich.
  22. *
  23. * Assembler : TurboAss
  24. *
  25.  
  26.                 OUTPUT 'RSRCAD_3.PRG'               ; Default, 8 KByte
  27.  
  28.                 TEXT
  29.  
  30. start:          lea     stack(PC),SP         ; Stack einrichten
  31.  
  32.                 clr.w   -(SP)                ; Zeiger auf IOREC fr RS232-
  33.                 move.w  #14,-(SP)            ; Eingabe holen
  34.                 trap    #14
  35.                 addq.l  #4,SP
  36.                 move.l  D0,iorec             ; Pointer sichern
  37.  
  38.                 movea.l D0,A0                ; Wurde der Empfangs-Buffer bereits
  39.                 cmpi.w  #1024,4(A0)          ; vergr”áert (Normal 256 Bytes) ?
  40.                 blt.s   please_add           ; N”, kleiner als 1 KByte ...
  41.  
  42.                 pea     t_already_inst(PC)   ; Fehlermeldung ausgeben
  43.  
  44. out_msg:        move.w  #9,-(SP)
  45.                 trap    #1
  46.                 addq.l  #6,SP
  47.                 move.w  #7,-(SP)             ; Auf Tastendruck warten
  48.                 trap    #1
  49.                 clr.w   -(SP)                ; Programm beenden
  50.                 trap    #1
  51.  
  52. please_add:     clr.w   -(SP)                ; Im Auto-Ordner suchen
  53.                 pea     s_name_auto(PC)
  54.                 move.w  #$4E,-(SP)
  55.                 trap    #1
  56.                 addq.l  #8,SP
  57.                 tst.w   D0
  58.                 bpl.s   direct_exec          ; Ok, gefunden
  59.  
  60.                 clr.w   -(SP)                ; Im aktuellen Pfad suchen
  61.                 pea     s_name(PC)
  62.                 move.w  #$4E,-(SP)
  63.                 trap    #1
  64.                 addq.l  #8,SP
  65.                 tst.w   D0
  66.                 bpl.s   direct_exec          ; Ok, gefunden
  67.  
  68.                 pea     t_fail(PC)           ; Fehler bei FSFIRST
  69.                 bra.s   out_msg              ; Msg. ausgeben
  70.  
  71. direct_exec:    move.w  #$2F,-(SP)           ; Adresse der DTA ermitteln
  72.                 trap    #1
  73.                 addq.l  #2,SP
  74.  
  75.                 movea.l D0,A0                ; Zeiger auf "x" im Filenamen
  76.                 move.b  37(A0),D0            ; (siehe obige Definition)
  77.  
  78.                 cmpi.b  #'0',D0              ; Kleiner ASCII 0 ?
  79.                 blt.s   default              ; Jop, Default ( = 32 KByte )
  80.                 cmpi.b  #'5',D0              ; Gr”áer ASCII 5 ?
  81.                 bgt.s   default              ; Default ...
  82.  
  83.                 sub.w   #'0',D0              ; ASCII 0 ($30) subtrahieren
  84.                 bra.s   get_values
  85.  
  86. default:        move.w  #3,D0                ; Default-Wert (3 fr 8 KByte)
  87.  
  88. get_values:     add.w   D0,D0                ; Wert verdoppeln
  89.                 andi.l  #$1F,D0              ; Evtl. vorhandene Mllbits raus
  90.  
  91.                 lea     size_tab(PC),A0      ; Adresse der Tabellen
  92.                 movea.l iorec(PC),A1         ; Pointer auf IOREC fr RS232-Input
  93.                 lea     t_install(PC),A2     ; Pointer auf Installations-Msg.
  94.  
  95.                 move.l  #buffer,(A1)+        ; Adresse des Buffers „ndern
  96.  
  97.                 move.w  0(A0,D0.w),size      ; Wort (Gr”áe) sichern
  98.                 move.w  0(A0,D0.w),(A1)+     ; ... und in IOREC eintragen
  99.  
  100.                 clr.l   (A1)+                ; Head & Tail-Index auf 0 setzen
  101.  
  102.                 move.w  12(A0,D0.w),(A1)+    ; Wert fr "Low Water Mark"
  103.                 move.w  24(A0,D0.w),(A1)+    ; Wert fr "High Water Mark"
  104.                 move.w  36(A0,D0.w),(A2)     ; ASCII-Ausgabe der Gr”áe
  105.  
  106.                 move.l  A2,-(SP)             ; Installations-Meldung ausgeben
  107.                 move.w  #9,-(SP)
  108.                 trap    #1
  109.                 addq.l  #6,SP
  110.  
  111.                 moveq   #0,D0                ; D0 l”schen
  112.                 move.w  size(PC),D0          ; Gr”áe des Buffers plus
  113.                 add.l   #ende-start+$0200,D0 ; Gr”áe des Programmes plus $200
  114.  
  115.                 clr.w   -(SP)                ; Kein Fehler
  116.                 move.l  D0,-(SP)             ; L„nge des zu sichernden Bereiches
  117.                 move.w  #$31,-(SP)           ; Keep Process
  118.                 trap    #1                   ; ... und ab in's Nirwana ...
  119.  
  120.                 DATA
  121.  
  122. iorec:          DC.L 0                              ; Buffer fr IOREC-Pointer
  123. size:           DC.W 0                              ; Buffer fr Gr”áe
  124.  
  125. size_tab:       DC.W $0400,$0800,$1000,$2000,$4000,$8000 ; Gr”áe
  126.                 DC.W $0200,$0400,$0800,$1000,$2000,$4000 ; Low Water Mark
  127.                 DC.W $0300,$0600,$0C00,$1800,$3000,$6000 ; High Water Mark
  128.                 DC.W " 1"," 2"," 4"," 8","16","32"  ; ASCII - Gr”áe
  129.  
  130. t_install:      DC.B "xx KByte for RS-232 Receive Buffer installed.",13,10,10,0
  131.  
  132. t_already_inst: DC.B 27,69,10," The RS232-Receive Buffer is already"
  133.                 DC.B " enhanced !",13,10,10," Press any key ...",13,10,7,0
  134.  
  135. t_fail:         DC.B 27,69,10," Can't find RSRCAD_*.PRG !",13,10,10
  136.                 DC.B " Press any key ...",13,10,7,0
  137.  
  138. s_name:         DC.B "RSRCAD_*.PRG",0               ; Suchstrings fr FSFIRST
  139. s_name_auto:    DC.B "\AUTO\RSRCAD_*.PRG",0
  140.                 EVEN
  141.  
  142.                 BSS
  143.  
  144. ende:
  145. buffer:         DS.W 512
  146.  
  147. stack:          END
  148.